const path = require('path')
const glob = require('glob')
const fs = require('fs')
const vm = require('vm')

/**
 * 获取入口表
 * @param globPath
 * @returns {{}}
 */
exports.getEntry = function (globPath) {
  let entries = {}
  glob.sync(globPath, {
    ignore: '**/components/**',
  }).forEach((entry) => {
    // 相对根目录的路径
    let entryPath = path.relative(process.cwd(), entry)
    // 取pages下目录名为文件名
    let dirName = path.dirname(entryPath)
    let fileNames = dirName.split(path.sep)
    let page = fileNames[fileNames.length - 1]
    // console.log(entryPath);
    entries[page] = {
      // page 的入口
      entry: entryPath,
      // 模板来源
      template: 'public/index.html',
      // 在 dist/index.html 的输出
      filename: `pages/${page}.html`,
      // 在这个页面中包含的块，默认情况下会包含
      // 提取出来的通用 chunk 和 vendor chunk。
      chunks: ['chunk-vendors', 'chunk-common', 'index'],
    }
  })
  return entries
}

/**
 * 使用vm执行代码，解析json文件
 * @param filePath
 * @returns {{}}
 */
exports.parseConfig = function (filePath) {
  let content = ''
  try {
    content = fs.readFileSync(filePath)
  } catch (e) {
    console.error(e)
    return {}
  }

  let code = `(${content})`
  let sandbox = {}
  return vm.runInThisContext(code, sandbox, {
    filename: filePath,
    displayErrors: false,
    timeout: 1000,
  })
}
